/**********************************
 * class Categories
 */
(function(){

/**
 * 构造函数
 */
// 数据类型说明:
var Categories = window.Categories = function( exeFile,selfOps,parentOps,childOps )
{
    // // 驱动属性
    this.exeFile = exeFile;
    this.selfOps = selfOps;
    this.parentOps = parentOps;
    this.childOps = childOps;

    this.UIL = new CategoryUIL();

};


Categories.fn = Categories.prototype =
{
    /**
     * 页面
     */
    add : function(cmd,dispObj)
    {
        var page = this.UIL.add();
        var strCmd = this.exeFile.concat( "?view=",cmd["view"],"&op=GetCategoriesTree&id=0" );
        Categories.SelectOptions( strCmd,page.find('.selectOptions'),0 );  // 分类选择框

        dispObj.append( page );                        // 添加到可视区域

        var frm = dispObj.find('.frm');
        frm[0].action = this.exeFile.concat("?",cmd.toString() );
        this.submit_add( frm );                       // 绑定提交事件
    },
    submit_add : function( frm )
    {
        frm.ajaxSubmit('json',App.ui.popupAlert);
    },

    /**
     * 页面, subsys/module/remove
     */
    remove : function(cmd,id)
    {
        // 当前位置
        //my_history.go(-1);    //这里不记录历史
        //if( !confirm("确定要删除？") ){ return false;  }

        // 读取数据
        var _ = this;
        var page = _.UIL.remove();
        var dispObj = App.ui.popupWrap.clone(true);
        App.ui.content.append( dispObj.append(page) );
        page.find(".cancel").click( function(){dispObj.remove();} );   //绑定取消按钮
        page.find(".ok").click( function(){
            dispObj.remove();
            var frm = page.find(".frm");
            frm[0].action = _.exeFile.concat( "?view=",cmd["view"],"&op=RemoveCategories" );
            frm.find("[name='ids']").val( id );

            var delObj = App.ui.content.find( "."+cmd["view"]+cmd["id"] );
            _.submit_remove( frm,dispObj,delObj );      //绑定提交事件
        });
    },
    submit_remove : function( frm,dispObj,delObj )
    {
        frm.ajaxSubmit('json',function(dat){
            App.ui.popupAlert(dat); }
        );
    },

    /**
     * 页面
     */
    modify : function(cmd,dispObj)
    {
        // 读取数据
        var _ = this;
        $.getJSON( "{0}?view={1}&op=GetCategoryDetails&id={2}".format( _.exeFile,cmd["view"],cmd["id"] ), function( json ){

            var page = _.UIL.modify(json);
            dispObj.append( page );           // 添加到可视区域

            var frm = dispObj.find('.frm');
            frm[0].action = _.exeFile.concat( "?",cmd.toString() );
            _.submit_modify( frm );                   // 绑定提交事件
        });
    },
    submit_modify : function( frm )
    {
        frm.ajaxSubmit('json',App.ui.popupAlert);
    },

    /**
     * 移动分类页面
     */
    move : function(cmd,dispObj)
    {
        // 读取数据
        var _ = this;
        $.getJSON( "{0}?view={1}&op=GetCategoryDetails&id={2}".format(_.exeFile,cmd["view"],cmd["id"] ), function( json ){
            var page = _.UIL.move(json);
            var strCmd = _.exeFile.concat( "?view=",cmd["view"],"&op=GetCategoriesTree&id=0" );
            Categories.SelectOptions( strCmd, page.find('.selectOptions'),cmd["id"] ); // 读取分类
            dispObj.append( page );                // 添加到可视区域

            var frm = dispObj.find('.frm');
            frm[0].action = _.exeFile.concat( "?",cmd.toString() );
            _.submit_move( frm );                  // 绑定提交事件
        });
    },
    submit_move : function( frm )
    {
        frm.ajaxSubmit('json',App.ui.popupAlert);
    },


    /**
     * 页面
     */
    get_detail : function(cmd,dispObj)
    {
        // 读取数据
        var _ = this;
        $.getJSON( "{0}?{1}".format(_.exeFile,cmd.toString() ), function( json ){
            dispObj.append( _.UIL.get_details(json) );
        });

    },

    /**
     * 页面, news/"+this.moduleCmd+"/list
     */
    get_list : function(cmd,dispObj)
    {
        // 读取数据
        var _ = this;
        $.getJSON( "{0}?{1}".format(_.exeFile,cmd.toString() ), function( json ){

            dispObj.append( _.UIL.get_list(json,cmd,_.childOps) );
            $(".record").mouseover(function(){        //绑定显示/隐藏操作条事件
                _.showOpBar($(this));
            }).mouseout(function(){
                _.hideOpBar($(this));
            });
            $(".btnRemove").click(function(){         //绑定删除事件
                _.remove(cmd,this.name);
                return false;
            });
            $(".catList").treeview();                 //使用treeview控件
        });
    },
    /**
     * 显示操作条
     */
    showOpBar : function(obj)
    {
        obj.find(".opBar").removeClass("hide");
    },
    /**
     * 隐藏操作条
     */
    hideOpBar : function(obj)
    {
        obj.find(".opBar").addClass("hide");
    },

    /**
     * 面包屑导航
     */
    get_breadcrumb : function( cmd,dispObj )
    {
        // 读取数据
        var _ = this;
        $.getJSON( "{0}?view{1}/breadcrumb&id={2}".format(_.exeFile,cmd.module,cmd.args(3)),function( json ){

            if('undefined'==typeof(json.id)){ return false;  }

            var a = new Array();
            a.push("当前位置:");
            for( var i=0; i<json.id.length; i++ )
            {
                a[i] = '<span class="h5"><a href="#{0}/list/{1}/1">{2}</a></span> '.format(cmd.module,json.id[i],json.title[i]);
            }
            dispObj.append( a.join("&gt;") );
        });
    }

};//class Categories.fn


/**
 * [静态]分类选择选项
 * reqFile 请求文件
 * respObj 输出对象
 * changeCallback是选择改变时执行的函数,格式:changeCallback()
 */
Categories.SelectOptions = function( strCmd,respObj,catCurId,changeCallback )
{
    // 设定默认值
    var undefined;
    if( undefined == catCurId ){ catCurId = 0;  }

    // 读取数据
    $.getJSON( strCmd,function( json ){

        var selectOptions;
        var selected = "";
        for( var i=0; i<json.id.length; i++ )
        {
            if( json.id[i] == catCurId ){ selected = 'selected="selected"';  }
            else{ selected = "";  }
            selectOptions += '<option ' + selected + ' value="' + json.id[i] + '">├' + "─".string(json.depth[i]) +" "+ json.title[i] + '</option>';
        }
        respObj.append( $(selectOptions) );

        if( changeCallback ){
            respObj.change(function(){
                changeCallback( $(this) );
            });
        }
    });
};


/**
 * [静态]单个selectOption
 */
Categories.SelectOption = function( strCmd,respObj )
{
    // 读取数据
    $.getJSON( strCmd,function( json ){
        var selectOption = '<option value="' + json.id + '">'+ json.title + '</option>';
        respObj.append( $(selectOption) );
    });
};


/**
 * [静态],面包屑导航
 * toWhere有两个取值: ancestors,brief
 */
Categories.breadcrumb = function( reqFile,respObj, subsysCmd, moduleCmd, catClsId, catId, higherCmd )
{
    var undefined;
    if( undefined == higherCmd ){  higherCmd = "";      }
    if( "" != higherCmd ){ higherCmd = higherCmd+'/';   }

    // 读取数据
    $.getJSON( reqFile+"?view"+subsysCmd+"/"+catClsId+"/breadcrumb"+"&id="+catId,function( json ){

        var a = new Array();
        for( var i=0; i<json.id.length; i++ )
        {
            a[i] = '<span class="h5"><a href="#'+subsysCmd+"/"+moduleCmd+'/list/'+ higherCmd +json.id[i] + '/1">'+ json.title[i] + '</a></span> ';
        }
        respObj.append( a.join("&gt;") );
    });
};


/**
 * 常用UI
 */
Categories.ui = {
    toolbar: function( cmd )
    {
        return '<span><a href="#view={0}&op=AddCategory" title="添加分类">添加分类</a></span>\
                <div class="divider"></div>'.format(cmd["view"]);
    }
};

})();